package com.zhilun;

import lombok.Data;

import java.util.Date;
import java.util.List;
@Data
public class ZhiLunCarrierInfoDetailResult {
    private Integer id; // 车辆ID
    private String carrierNo; // 车牌号
    private String wheelPosition; // 轮胎位置编号, 逗号分开，只记录一侧
    private Boolean alarm; // 安全状态 true：预警 false：无预警
    private Boolean lowPower; // 运行状态（低功耗） true:停止 false：运动
    private Boolean charge; // 是否充电 true：是 false：否
    private String bandCarrierNo; // 绑定车辆车牌号
    private String bandStatus; // 绑定终端设备状态 1 已绑定，2 未绑定任何设备
    private Boolean lostStatus; // 是否失联 true：是 false：否
    private Boolean lowBattery; // 是否低电量 true：是 false：否
    private Boolean batteryProtect; // 是否蓄电池保护 true：是 false：否
    private Integer velocity; // 速度
    private String gpdModel; // 定位模式
    private Date lastUptGpsTime; // 定位时间
    private Integer batteryPower; // 终端电量
    private GeoPoint gpsLocation; // 位置(经纬度)
    private Date deviceLastHeart; // 终端更新时间

    // 驾驶员信息列表
    private List<CarrierDriverVO> carrierDriverVOList;

    // 车辆轮位信息列表
    private List<CarrierWheelVO> carrierWheelVOS;

    // 内部类: CarrierDriverVO
    public static class CarrierDriverVO {
        private String mobile; // 驾驶员手机
        private String userName; // 驾驶员名称

        // Getters and Setters...
        public String getMobile() {
            return mobile;
        }

        public void setMobile(String mobile) {
            this.mobile = mobile;
        }

        public String getUserName() {
            return userName;
        }

        public void setUserName(String userName) {
            this.userName = userName;
        }
    }

    // 内部类: CarrierWheelVO
    public static class CarrierWheelVO {
        private Integer id; // 轮位主键ID
        private String carrierNo; // 车牌号
        private String position; // 轮胎位置
        private Integer alarmFlag; // 报警类型
        private Date alarmDate; // 报警时间
        private Integer bindFlag; // 是否绑定传感器 0：否，1：是

        // 传感器列表
        private List<SensorVO> sensorVOS;

        // 报警事件列表
        private List<AlarmEvent> alarmEventList;

        // 轮胎当前信息
        private List<TyreCurrentInfoVO> tyreCurrentInfoVO;

        // Getters and Setters...
        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getCarrierNo() {
            return carrierNo;
        }

        public void setCarrierNo(String carrierNo) {
            this.carrierNo = carrierNo;
        }

        public String getPosition() {
            return position;
        }

        public void setPosition(String position) {
            this.position = position;
        }

        public Integer getAlarmFlag() {
            return alarmFlag;
        }

        public void setAlarmFlag(Integer alarmFlag) {
            this.alarmFlag = alarmFlag;
        }

        public Date getAlarmDate() {
            return alarmDate;
        }

        public void setAlarmDate(Date alarmDate) {
            this.alarmDate = alarmDate;
        }

        public Integer getBindFlag() {
            return bindFlag;
        }

        public void setBindFlag(Integer bindFlag) {
            this.bindFlag = bindFlag;
        }

        public List<SensorVO> getSensorVOS() {
            return sensorVOS;
        }

        public void setSensorVOS(List<SensorVO> sensorVOS) {
            this.sensorVOS = sensorVOS;
        }

        public List<AlarmEvent> getAlarmEventList() {
            return alarmEventList;
        }

        public void setAlarmEventList(List<AlarmEvent> alarmEventList) {
            this.alarmEventList = alarmEventList;
        }

        public List<TyreCurrentInfoVO> getTyreCurrentInfoVO() {
            return tyreCurrentInfoVO;
        }

        public void setTyreCurrentInfoVO(List<TyreCurrentInfoVO> tyreCurrentInfoVO) {
            this.tyreCurrentInfoVO = tyreCurrentInfoVO;
        }
    }

    // 内部类: SensorVO
    public static class SensorVO {
        private String sensorNo; // 传感器号
        private Integer sensorType; // 传感器类别
        private Integer temp; // 温度
        private Integer pressure; // 压力
        private Integer alarmFlag; // 报警类型
        private Date alarmDate; // 报警时间
        private Date lastUptDateTime; // 传感器最后更新时间

        // Getters and Setters...
        public String getSensorNo() {
            return sensorNo;
        }

        public void setSensorNo(String sensorNo) {
            this.sensorNo = sensorNo;
        }

        public Integer getSensorType() {
            return sensorType;
        }

        public void setSensorType(Integer sensorType) {
            this.sensorType = sensorType;
        }

        public Integer getTemp() {
            return temp;
        }

        public void setTemp(Integer temp) {
            this.temp = temp;
        }

        public Integer getPressure() {
            return pressure;
        }

        public void setPressure(Integer pressure) {
            this.pressure = pressure;
        }

        public Integer getAlarmFlag() {
            return alarmFlag;
        }

        public void setAlarmFlag(Integer alarmFlag) {
            this.alarmFlag = alarmFlag;
        }

        public Date getAlarmDate() {
            return alarmDate;
        }

        public void setAlarmDate(Date alarmDate) {
            this.alarmDate = alarmDate;
        }

        public Date getLastUptDateTime() {
            return lastUptDateTime;
        }

        public void setLastUptDateTime(Date lastUptDateTime) {
            this.lastUptDateTime = lastUptDateTime;
        }
    }

    // 内部类: AlarmEvent
    public static class AlarmEvent {
        private Integer alarmFlag; // 报警类型
        private Date startTime; // 预警开始时间
        private Long duration; // 预警持续时间
        private Double totalKm; // 预警持续里程

        // Getters and Setters...
        public Integer getAlarmFlag() {
            return alarmFlag;
        }

        public void setAlarmFlag(Integer alarmFlag) {
            this.alarmFlag = alarmFlag;
        }

        public Date getStartTime() {
            return startTime;
        }

        public void setStartTime(Date startTime) {
            this.startTime = startTime;
        }

        public Long getDuration() {
            return duration;
        }

        public void setDuration(Long duration) {
            this.duration = duration;
        }

        public Double getTotalKm() {
            return totalKm;
        }

        public void setTotalKm(Double totalKm) {
            this.totalKm = totalKm;
        }
    }

    // 内部类: TyreCurrentInfoVO
    public static class TyreCurrentInfoVO {
        private String tyreNo; // 轮胎胎号
        private String tyreBrand; // 轮胎品牌
        private String tyreSpec; // 轮胎规格
        private String tyreTread; // 花纹类型
        private String tyreLevel; // 轮胎层级

        // Getters and Setters...
        public String getTyreNo() {
            return tyreNo;
        }

        public void setTyreNo(String tyreNo) {
            this.tyreNo = tyreNo;
        }

        public String getTyreBrand() {
            return tyreBrand;
        }

        public void setTyreBrand(String tyreBrand) {
            this.tyreBrand = tyreBrand;
        }

        public String getTyreSpec() {
            return tyreSpec;
        }

        public void setTyreSpec(String tyreSpec) {
            this.tyreSpec = tyreSpec;
        }

        public String getTyreTread() {
            return tyreTread;
        }

        public void setTyreTread(String tyreTread) {
            this.tyreTread = tyreTread;
        }

        public String getTyreLevel() {
            return tyreLevel;
        }

        public void setTyreLevel(String tyreLevel) {
            this.tyreLevel = tyreLevel;
        }
    }

    // 内部类: GeoPoint
    public static class GeoPoint {
        private Double latitude; // 纬度
        private Double longitude; // 经度


        public Double getLatitude() {
            return latitude;
        }

        public void setLatitude(Double latitude) {
            this.latitude = latitude;
        }

        public Double getLongitude() {
            return longitude;
        }

        public void setLongitude(Double longitude) {
            this.longitude = longitude;
        }
    }
}
